package com.witsight.platform.dao;

import java.io.Serializable;
import java.util.List;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.NoRepositoryBean;

import com.witsight.platform.model.IBaseObject;


/**   
 * 说明：自定义的动态Sql／Hql实现
 * @Title: DynamicJpaRepository.java 
 * @Package com.witsight.hibernate.dao 
 * @See: {@link CommonRepository}
 * 		
 * Copyright: Copyright (c) 2017
 * Company:sany huax witsight team by product
 * @author: penght  
 * @date: 2017年9月14日 下午2:34:45 
 * @version: V1.0
 *
 */
@NoRepositoryBean
public interface DynamicJpaRepository<T, ID extends Serializable, M> extends CommonRepository, CrudRepository<T, ID> {
	/**
	 * Returns all instances of the type.
	 * 
	 * @return all entities
	 */
	abstract List<T> findAll();
	/**
	 * 
	 * 说明:根据map参数取得所有数据
	 * 
	 * @Title: findAllByQuery
	 * @See: {@link #findAllByParams(String, IBaseObject)}
	 * @author penght
	 * @param namequery
	 *            namequery中配置的key
	 * @param params
	 *            检索条件map对象(IBaseObject或者BoEntity)
	 * @return 全部数据
	 * @date: 2015年4月22日 下午2:56:13
	 */
	abstract List<T> findAllByParams(String queryName, IBaseObject params);
	
	/**
	 * 
	 * 说明：根据map参数取得所有BoEntity数据 (Hql)
	 * @Title: findBoEntitysByParams
	 * @See: {@link #findBoEntitysByParams(String, IBaseObject)}
	 * @author penght
	 * @param queryName namequery中配置的key
	 * @param params 检索条件map对象(IBaseObject或者BoEntity)
	 * @return 所有BoEntity数据
	 * @date: 2017年9月18日 下午2:37:28
	 */
	abstract List<M> findBoEntitysByParams(String queryName, IBaseObject params);
	
	
	/**
	 * 
	 * 说明：根据map参数取得一条数据
	 * @Title: findOneByParams
	 * @See: {@link #findOneByParams(String, IBaseObject)}
	 * @author penght
	 * @param queryName  namequery中配置的key
	 * @param mapObject 检索条件map对象(IBaseObject或者BoEntity)
	 * @return 一条数据
	 * @date: 2017年9月15日 上午10:25:38
	 */
	abstract T findOneByParams(String queryName, IBaseObject params);
	/**
	 * 
	 * 说明：根据map参数取得一条BoEntity数据 (Hql)
	 * @Title: findBoEntitysByParams
	 * @See: {@link #findBoEntitysByParams(String, IBaseObject)}
	 * @author penght
	 * @param queryName namequery中配置的key
	 * @param params 检索条件map对象(IBaseObject或者BoEntity)
	 * @return 一条BoEntity数据
	 * @date: 2017年9月18日 下午2:37:28
	 */
	abstract M findBoEntityByParams(String queryName, IBaseObject params);
	/**
	 * 
	 * 说明：根据翻页取得所有的对象，通过动态hql
	 * @Title: findPageByParams
	 * @See: {@link #findPageByParams(String, IBaseObject, Pageable)}
	 * @author penght
	 * @param queryName namequery中配置的key
	 * @param mapObject 检索条件map对象(IBaseObject或者BoEntity)
	 * @param pageable 翻页参数
	 * @return 翻页结果集合
	 * @date: 2017年9月15日 上午10:25:47
	 */
	abstract Page<T> findPageByParams(String queryName, IBaseObject params, Pageable pageable);
	/**
	 * 
	 * 说明：根据翻页取得所有的对象，通过动态hql
	 * @Title: findPageByParams
	 * @See: {@link #findPageByParams(String, IBaseObject, Pageable)}
	 * @author penght
	 * @param queryName namequery中配置的key
	 * @param mapObject 检索条件map对象(IBaseObject或者BoEntity)
	 * @param pageable 翻页参数
	 * @return 翻页结果集合
	 * @date: 2017年9月15日 上午10:25:47
	 */
	abstract Page<M> findPageBoEntityByParams(String queryName, IBaseObject params, Pageable pageable);
}
